// Podstawowe operacje na plikach
// Program wymaga, aby w biecym katalogu znajdowa si
// plik o nazwie testfile

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString            *fName = @"testfile";
    NSFileManager       *fm;
    NSDictionary        *attr;

    // Utworzenie egzemplarza menedera plikw

    fm = [NSFileManager defaultManager];

    // Sprawdzenie, czy plik testowy istnieje

    if ([fm fileExistsAtPath: fName] == NO)  {
        NSLog(@"Plik nie istnieje!");
        return 1;
    }

    // Utworzenie kopii pliku

    if ([fm copyItemAtPath: fName toPath: @"newfile" error: NULL] == NO) {
        NSLog(@"Kopiowanie pliku nie powiodo si!");
        return 2;
    }

    // Sprawdzenie, czy dwa pliki s takie same

    if ([fm contentsEqualAtPath: fName andPath: @"newfile"] == NO) {
        NSLog(@"Pliki nie s takie same!");
        return 3;
    }

    // Zmiana nazwy kopii pliku

    if ([fm moveItemAtPath: @"newfile" toPath: @"newfile2"
        error: NULL] == NO){
        NSLog(@"Zmiana nazwy nie powioda si ");
        return 4;
    }

    // Sprawdzenie rozmiaru pliku newfile2

    if ((attr = [fm attributesOfItemAtPath: @"newfile2" error: NULL])== nil)  {
        NSLog(@"Nie mona pobra atrybutw pliku!");
        return 5;
    }

    NSLog(@"Rozmiar pliku w bajtach: %llu ",
        [[attr objectForKey: NSFileSize] unsignedLongLongValue]);

    // Usunicie oryginalnego pliku

    if ([fm removeItemAtPath: fName error: NULL] == NO)  {
        NSLog(@"Usunicie pliku nie powiodo si ");
        return 6;
    }

    NSLog(@"Wszystkie operacje zakoczone powodzeniem!");

    // Wywietlenie zawartoci nowo utworzonego pliku

    NSLog(@"%@", [NSString stringWithContentsOfFile:
          @"newfile2" encoding:NSUTF8StringEncoding error:NULL]);

    [pool drain];
    return 0;
}